package Classes;

import junit.framework.Assert;

import org.junit.Before;
import org.junit.Test;


public class TestaEstabelecimento {
	Estabelecimento estabelecimento1;
	Estabelecimento estabelecimento2;
	Estabelecimento estabelecimento3;

	
	@Before 
	public void criaEstabelecimentos() throws Exception{
		estabelecimento1 = new Estabelecimento("Bonaparte","Shopping Boulevard", "A la carte");
		estabelecimento2 = new Estabelecimento("Chinatown", "Shopping Boulevard", "Self-service");
	}
	
	@Test
	public void testaGetNome(){
		Assert.assertEquals("Bonaparte", estabelecimento1.getNome());
		Assert.assertEquals("Chinatown", estabelecimento2.getNome());
	}
	
	@Test
	public void testaSetNome(){
		Assert.assertEquals("Bonaparte", estabelecimento1.getNome());
		Assert.assertEquals("Chinatown", estabelecimento2.getNome());
		
		Assert.assertFalse(estabelecimento1.setNome("  "));
		Assert.assertTrue(estabelecimento1.setNome("Testando set bonaparte"));
		Assert.assertFalse(estabelecimento2.setNome("  "));
		Assert.assertTrue(estabelecimento2.setNome("Testando set chinatown"));
		
		Assert.assertEquals("Testando set bonaparte", estabelecimento1.getNome());
		Assert.assertEquals("Testando set chinatown", estabelecimento2.getNome());
	}
	
	@Test
	public void testaGetTipoDeRefeicao(){
		Assert.assertEquals("A la carte", estabelecimento1.getTipoDeRefeicao());
		Assert.assertEquals("Self-service", estabelecimento2.getTipoDeRefeicao());
	}
	
	@Test
	public void testaSetTipoDeRefeicao(){
		Assert.assertEquals("A la carte", estabelecimento1.getTipoDeRefeicao());
		Assert.assertEquals("Self-service", estabelecimento2.getTipoDeRefeicao());
		
		Assert.assertFalse(estabelecimento1.setTipoDeRefeicao("  "));
		Assert.assertTrue(estabelecimento1.setTipoDeRefeicao("Testando set a la carte"));
		Assert.assertFalse(estabelecimento2.setTipoDeRefeicao("  "));
		Assert.assertTrue(estabelecimento2.setTipoDeRefeicao("Testando set self-service"));
		
		Assert.assertEquals("Testando set a la carte", estabelecimento1.getTipoDeRefeicao());
		Assert.assertEquals("Testando set self-service", estabelecimento2.getTipoDeRefeicao());
	}
	
	@Test
	public void testaGetEndereco(){
		Assert.assertEquals("Shopping Boulevard", estabelecimento1.getEndereco());
		Assert.assertEquals("Shopping Boulevard", estabelecimento2.getEndereco());
	}
	
	@Test
	public void testaSetEndereco(){
		Assert.assertEquals("Shopping Boulevard", estabelecimento1.getEndereco());
		Assert.assertEquals("Shopping Boulevard", estabelecimento2.getEndereco());
		
		Assert.assertFalse(estabelecimento1.setEndereco("  "));
		Assert.assertTrue(estabelecimento1.setEndereco("Testando set Shopping Boulevard 1"));
		Assert.assertFalse(estabelecimento2.setEndereco("  "));
		Assert.assertTrue(estabelecimento2.setEndereco("Testando set Shopping Boulevard 2"));
		
		Assert.assertEquals("Testando set Shopping Boulevard 1", estabelecimento1.getEndereco());
		Assert.assertEquals("Testando set Shopping Boulevard 2", estabelecimento2.getEndereco());
	}
	
	@Test
	public void testaConstrutor() throws Exception{
		//Testando nome vazio
		try{
			estabelecimento3 = new Estabelecimento(" ","Shopping Boulevard", "A la carte");
			Assert.fail("Era esperado tratamento de erro para nome de estabelecimento invalido.");
		}catch (Exception e){
			Assert.assertEquals("Nome do Estabelecimento vazio!", e.getMessage());
		}
		
		try{
			estabelecimento3 = new Estabelecimento("","Shopping Boulevard", "A la carte");
			Assert.fail("Era esperado tratamento de erro para nome de estabelecimento invalido.");
		}catch (Exception e){
			Assert.assertEquals("Nome do Estabelecimento vazio!", e.getMessage());
		}
		
		//Testando Endereco vazio
		try{
			estabelecimento3 = new Estabelecimento("Bonaparte","   ", "A la carte");
			Assert.fail("Era esperado tratamento de erro para endereco de estabelecimento invalido.");
		}catch (Exception e){
			Assert.assertEquals("Endereco do Estabelecimento vazio!", e.getMessage());
		}
		try{
			estabelecimento3 = new Estabelecimento("Bonaparte","", "A la carte");
			Assert.fail("Era esperado tratamento de erro para endereco de estabelecimento invalido.");
		}catch (Exception e){
			Assert.assertEquals("Endereco do Estabelecimento vazio!", e.getMessage());
		}
		
		//Testando Tipo de refeicao vazio
		try{
			estabelecimento3 = new Estabelecimento("Bonaparte","Shopping Boulevard", "");
			Assert.fail("Era esperado tratamento de erro para tipo de refeicao de estabelecimento invalido.");
		}catch (Exception e){
			Assert.assertEquals("Tipo de refeicao do Estabelecimento vazio!", e.getMessage());
		}
		try{
			estabelecimento3 = new Estabelecimento("Bonaparte","Shopping Boulevard", "           ");
			Assert.fail("Era esperado tratamento de erro para tipo de refeicao de estabelecimento invalido.");
		}catch (Exception e){
			Assert.assertEquals("Tipo de refeicao do Estabelecimento vazio!", e.getMessage());
		}
	}
}
